package pl.edu.agh.admin.api;

import java.util.Collection;
import java.util.List;
import java.util.Map;

public interface CronTabManager {
	
	/**
	 * pobierania wszystkich user�w - lista na podstawie ich plki�w cron
	 * @return
	 */
	public Collection<User> getUseres();
	
	/**
	 * wszystkie taski wszystkich user�w - czyj jest task mo�na sprawdzi� wywo�uj�c getUser na tasku
	 * @return
	 */
	public Collection<Task> getAllTasks();
	
	/**
	 * Wszystkie taski podanego usera je�li user == null to zwracana jest pusta lista
	 * @param user
	 * @return
	 */
	public Collection<Task> getUserTasks(User user);
	
	/**
	 * tworzenie taska nie u�ywa� bezpo�rednio metod z implementacji!!
	 * metoda zwr�ci Task kt�ry potem mo�na updateowa� innymi metodami - np. �eby ustawi� crona w wygodniejszy spos�b 
	 * @param cron cron w postaci stringa je�li null to domy�lna warto�� b�dzie zastosowana czyli co dzie� o p�nocy 0 0 * * *
	 * @param command komenda do wykonania wraz ze �cie�k� czyli np /bin/java je�li null to ustawi "echo"
	 * @return nowy Task
	 */
	public Task createTask(User user, String cron, String command) throws PermissionDeniedException;
	
	/**
	 * usuwanie taska rzuca wyj�tek je�li chcemy usun�� taska kt�rego nie mo�emy np. jeste�my userem i chcemy usun�� co� rootowi
	 * @param task
	 * @throws PermissionDeniedException
	 */
	public void deleteTask(Task task) throws PermissionDeniedException;
	
	/**
	 * trzeba wywolac zapisanie tablicy przed zakonczeniem dzialania programu!!
	 */
	public void save();
	
	/**
	 * mozna wymusic ponowne wczytanie danych w trakcie dzialania (np. przycisk refresh)
	 */
	public void load();
}
